void init_dtables();
void init_gdt();
void init_idt();
void create_idt_entry(u32int index, u32int base, u32int selector, u32int flags);
void remap_irq_table();
extern void idt_flush(u32int);
extern void assemble_idt();
gdt_entry create_gdt_entry(u32int base, u32int limit, u8int access, u8int granularity);
gdt_entry get_gdt_entry(u32int index);
void set_gdt_entry(u32int index, gdt_entry entry);
void assemble_gdt();
gdt_entry create_gdt_entry_for_tss(u16int ss0, u32int esp0);
extern void gdt_flush(u32int);
extern void tss_flush();

static gdt_entry gdt_entries[6];
static volatile gdt_pointer gdt_ptr;
static tss_entry sole_tss_entry;
static idt_entry idt_entries[256];
static volatile idt_pointer idt_ptr;
